home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / tclMotif-1.4 / send / programs / xmSend4.c < prev    next >
C/C++ Source or Header  |  1995-06-29  |  5KB  |  198 lines

  1. /*
  2.  * A Motif program to send and receive messages internally, to its own
  3.  * buttons. It can also send a message to tkSend4 to increment its button
  4.  */
  5.  
  6. #include <stdio.h>
  7. #include <Xm/Label.h>
  8. #include <Xm/PushB.h>
  9. #include <Xm/RowColumn.h>
  10. #include "../tclXtSend.h"
  11.  
  12. void
  13. SendTo1(w, clientData, callData)
  14.     Widget w;
  15.     XtPointer clientData;
  16.     XtPointer callData;
  17. {
  18.     Tcl_Interp *interp = (Tcl_Interp *) clientData;
  19.     char sendCommand[1024];
  20.  
  21.     strcpy(sendCommand,
  22.         "send xmSend4 incrementLabel1");
  23.     if (Tcl_Eval(interp, sendCommand) != TCL_OK)
  24.     fprintf(stderr, "send failed: %s\n", interp->result);
  25. }
  26.  
  27. void
  28. SendTo2(w, clientData, callData)
  29.     Widget w;
  30.     XtPointer clientData;
  31.     XtPointer callData;
  32. {
  33.     Tcl_Interp *interp = (Tcl_Interp *) clientData;
  34.     char sendCommand[1024];
  35.  
  36.     strcpy(sendCommand,
  37.         "send xmSend4 incrementLabel1; incrementLabel2");
  38.     if (Tcl_Eval(interp, sendCommand) != TCL_OK)
  39.     fprintf(stderr, "send failed: %s\n", interp->result);
  40. }
  41.  
  42. void
  43. SendTo3(w, clientData, callData)
  44.     Widget w;
  45.     XtPointer clientData;
  46.     XtPointer callData;
  47. {
  48.     Tcl_Interp *interp = (Tcl_Interp *) clientData;
  49.     char sendCommand[1024];
  50.  
  51.     strcpy(sendCommand,
  52.         "send tkSend4 incrementLabel");
  53.     if (Tcl_Eval(interp, sendCommand) != TCL_OK)
  54.     fprintf(stderr, "send failed: %s\n", interp->result);
  55. }
  56.  
  57.  
  58. char incrementLabelCmd[] = "\
  59.   proc incrementLabel1 {} { \n\
  60.     getLabel1 value \n\
  61.     incr value \n\
  62.     setLabel1 $value \n\
  63.   } \n\
  64.   proc incrementLabel2 {} { \n\
  65.     getLabel2 value \n\
  66.     incr value \n\
  67.     setLabel2 $value \n\
  68.   } \n\
  69.   proc incrementLabel3 {} { \n\
  70.     getLabel3 value \n\
  71.     incr value \n\
  72.     setLabel3 $value \n\
  73.   } \
  74. ";
  75.  
  76. int
  77. SetLabel(clientData, interp, argc, argv)
  78.     ClientData *clientData;
  79.     Tcl_Interp *interp;
  80.     int argc;
  81.     char **argv;
  82. {
  83.     XmString xmstr;
  84.     Widget w = (Widget) clientData;
  85.  
  86.     if (argc < 2) {
  87.     Tcl_SetResult(interp, "setLabel label", TCL_STATIC);
  88.     return TCL_ERROR;
  89.     }
  90.  
  91. fprintf(stderr, "**Setting label to %s\n", argv[1]);
  92.     xmstr = XmStringCreateLocalized(argv[1]);
  93.     XtVaSetValues(w, XmNlabelString, xmstr, NULL);
  94.     XmStringFree(xmstr);
  95.  
  96.     return TCL_OK;
  97. }
  98.  
  99. int
  100. GetLabel(clientData, interp, argc, argv)
  101.     ClientData *clientData;
  102.     Tcl_Interp *interp;
  103.     int argc;
  104.     char **argv;
  105. {
  106.     XmString xmstr;
  107.     String str;
  108.     Widget w = (Widget) clientData;
  109.  
  110.     if (argc < 2) {
  111.     Tcl_SetResult(interp, "getLabel \"label\"", TCL_STATIC);
  112.     return TCL_ERROR;
  113.     }
  114.  
  115.     XtVaGetValues(w, XmNlabelString, &xmstr, NULL);
  116.     XmStringGetLtoR(xmstr, XmFONTLIST_DEFAULT_TAG, &str);
  117.     Tcl_SetVar(interp, argv[1], str, 0);
  118.  
  119.     XtFree(str);
  120.     XmStringFree(xmstr);
  121.  
  122.     return TCL_OK;
  123. }
  124.  
  125. int
  126. main(argc, argv)
  127.     int argc;
  128.     char **argv;
  129. {
  130.     Widget toplevel;
  131.     Widget rc;
  132.     Widget button;
  133.     Widget label;
  134.     Tcl_Interp *interp;
  135.     XtAppContext app;
  136.  
  137.     toplevel = XtAppInitialize(&app, "XmSend", NULL, 0, &argc, argv,
  138.                 NULL, NULL, 0);
  139.  
  140.     interp = Tcl_CreateInterp();
  141.  
  142.     if (TclXtSend_RegisterInterp(interp, "xmSend4", toplevel) == TCL_ERROR) {
  143.     fprintf(stderr, "couldn't register interpreter %s\n", argv[0]);
  144.     exit(1);
  145.     }
  146.  
  147.     rc = XmCreateRowColumn(toplevel, "rc", NULL, 0);
  148.     XtManageChild(rc);
  149.     XtVaSetValues(rc,
  150.         XmNpacking, XmPACK_COLUMN,
  151.         XmNnumColumns, 2,
  152.         NULL);
  153.  
  154.     button = XmCreatePushButton(rc, "Incr label1", NULL, 0);
  155.     XtManageChild(button);
  156.     XtAddCallback(button, XmNactivateCallback, SendTo1, (XtPointer) interp);
  157.  
  158.     button = XmCreatePushButton(rc, "Incr 1&2", NULL, 0);
  159.     XtManageChild(button);
  160.     XtAddCallback(button, XmNactivateCallback, SendTo2, (XtPointer) interp);
  161.  
  162.     button = XmCreatePushButton(rc, "Incr tkSend4", NULL, 0);
  163.     XtManageChild(button);
  164.     XtAddCallback(button, XmNactivateCallback, SendTo3, (XtPointer) interp);
  165.  
  166.     label = XmCreateLabel(rc, "1", NULL, 0);
  167.     XtManageChild(label);
  168.     Tcl_CreateCommand(interp, "setLabel1", SetLabel, (ClientData *) label,
  169.         (Tcl_CmdDeleteProc *) NULL);
  170.     Tcl_CreateCommand(interp, "getLabel1", GetLabel, (ClientData *) label,
  171.         (Tcl_CmdDeleteProc *) NULL);
  172.  
  173.     label = XmCreateLabel(rc, "2", NULL, 0);
  174.     XtManageChild(label);
  175.     Tcl_CreateCommand(interp, "setLabel2", SetLabel, (ClientData *) label,
  176.         (Tcl_CmdDeleteProc *) NULL);
  177.     Tcl_CreateCommand(interp, "getLabel2", GetLabel, (ClientData *) label,
  178.         (Tcl_CmdDeleteProc *) NULL);
  179.  
  180.     label = XmCreateLabel(rc, "3", NULL, 0);
  181.     XtManageChild(label);
  182.     Tcl_CreateCommand(interp, "setLabel3", SetLabel, (ClientData *) label,
  183.         (Tcl_CmdDeleteProc *) NULL);
  184.     Tcl_CreateCommand(interp, "getLabel3", GetLabel, (ClientData *) label,
  185.         (Tcl_CmdDeleteProc *) NULL);
  186.  
  187.     XtRealizeWidget(toplevel);
  188.  
  189.     /*
  190.      * Create tcl commands based in C, and then load a procedure
  191.      */
  192.     if (Tcl_Eval(interp, incrementLabelCmd) != TCL_OK)
  193.     fprintf(stderr, "couldn't load cmds: %s\n", interp->result);
  194.  
  195.  
  196.     XtAppMainLoop(app);
  197. }
  198.